草庐IT

c - WaitForMultipleObjects 堆栈

全部标签

windows - 符号如何解决在 x86 调试中使用 FPO 遍历堆栈?

在这个答案中:https://stackoverflow.com/a/8646611/192359,解释了在调试x86代码时,即使使用了FPO(帧指针省略),符号也允许调试器显示调用堆栈。给出的解释是:Onthex86PDBscontainFPOinformation,whichallowsthedebuggertoreliablyunwindacallstack.我的问题是这些信息是什么?据我了解,仅知道函数是否具有FPO并不能帮助您找到堆栈指针的原始值,因为这取决于运行时信息。我在这里错过了什么? 最佳答案 从根本上说,总是可以

windows - WinDbg 没有显示整个调用堆栈?

我正在尝试使用WinDbg调试一款名为“Ballmaster”的非常古老的游戏(我没有其源代码)。当显示对话框时,我将WinDbg附加到游戏中,这样UI线程的调用堆栈就不会改变。以下是正在运行的线程列表:当我点击Ballmasterthread,呈现如下调用栈:ntdll!NtDelayExecution+0xcKERNELBASE!SleepEx+0x99KERNELBASE!Sleep+0xfUSER31!HookedCreateWindowExA+0x41DlgBox!Ordinal49+0x35ddDlgBox!Ordinal49+0x4d58uxtheme!ThemePreD

c++ - 等待 WaitForMultipleObjects

我正在尝试为我的FileWatcher类编写单元测试。FileWatcher派生自Thread类并使用WaitForMultipleObjects在其线程过程中等待两个句柄:从FindFirstChangeNotification返回的句柄让我取消上述等待的事件句柄。所以基本上FileWatcher正在等待最先发生的事情:文件更改或者我告诉它停止监视。现在,在尝试编写测试此类的代码时,我需要等待它开始等待。伪代码:FileWatcher.Wait(INFINITE)ChangeFile()//VerifythatFileWatcherworks(withsomeotherevent-u

windows - 遍历 WDM 设备堆栈

据我所知,只能从下往上迭代WDM设备的设备堆栈,因为DEVICE_OBJECT有一个AttachedDevice成员(但没有LowerDevice成员)。幸运的是,AddDevice回调接收到PhysicalDeviceObject,因此您可以遍历整个堆栈。在我的过滤器驱动程序中,我试图确定我是否已经在过滤某个设备对象。(假设我对此有正当理由。请耐心等待。)我的想法是遍历堆栈中的每个DEVICE_OBJECT并将其DriverObject成员与我的进行比较。从IoGetAttachedDeviceReference的存在来看,我认为仅仅访问AttachedDevice并不是一件安全的事

c++ - 如何以编程方式判断两个变量是否在同一个堆栈上? (在 Windows 中)

我在一个线程中。我有一个地址。该地址是否来self正在使用的同一堆栈上的变量?staticint*address;voidA(){intx;atomic::CAS(address,0,&x);//ieaddress=&x//...}voidB(){inty;int*addr=atomic::read(address);//ieaddr=addressif(addr&&on_same_stack(&y,addr)){//B()calledfromA()}else{//B()calledfromdifferentthreadthanA()}}我需要实现on_same_stack(addr1

windows - 为什么堆栈低于内存中的文本?

我正在使用Windbg来研究进程内存,不禁注意到一些人们刚刚接受的东西。打印寄存器时:eax=00000000ebx=008b6f00ecx=01010101edx=ffffffffesi=00000000edi=00465000eip=77f9d022esp=05cffc48ebp=05cffc54iopl=0nvupeingnznaponccs=001bss=0023ds=0023es=0023fs=0038gs=0000efl=00000286请注意ESP和EBP的值低于EIP,这意味着堆栈在某处低于进程的文本部分(!?)。为什么是这样?据我所知(我在Linux中也用gdb做过同

c# - .NET EXE 和 DLL 之间的堆栈/堆差异

这个问题困扰了我很久:.NETEXE和DLL文件都有地址空间。我知道他们都有代码空间和全局变量空间。但我想知道DLL是否有自己的堆和堆栈空间。 最佳答案 进程拥有堆。每个线程都拥有自己的堆栈。当EXE调用DLL中的函数时,使用相同的堆栈,因为函数调用在同一线程中。要说明的另一点是进程具有加载EXE和DLL的地址空间。 关于c#-.NETEXE和DLL之间的堆栈/堆差异,我们在StackOverflow上找到一个类似的问题: https://stackoverf

javascript - 在生产中运行平均堆栈应用程序

我只是在玩MEAN堆栈,但我不知道如何在生产模式下运行我的应用程序来执行一些基准测试。网站mean.io说:Torunwithadifferentenvironment,justspecifyNODE_ENVasyoucallgrunt:$NODE_ENV=testgrunt如何将变量传递给grunt?编辑:我正在使用Windows 最佳答案 要确定应用程序是在生产模式还是开发模式下运行,它会检查NODE_ENV环境变量,这是一个您将在shell中设置并从Node读取的变量。如果你想在生产模式下运行grunt,使用:$NODE_EN

windows - "Unloaded"前缀在 Windows 堆栈跟踪中意味着什么?

我遇到了第三方DLL在卸载时似乎会导致递归堆栈溢出崩溃的可怕问题。我最终在堆栈上得到了这个模式(使用windbg):+0xdd01ntdll!ExecuteHandler2+0x26ntdll!ExecuteHandler+0x24ntdll!KiUserExceptionDispatcher+0xf+0xdd01ntdll!ExecuteHandler2+0x26ntdll!ExecuteHandler+0x24ntdll!KiUserExceptionDispatcher+0xf...如您所料,我没有ThirdParty.dll的源代码。问:堆栈转储中的前缀“Unloaded_”是

windows - 在 Windows 中列出目录堆栈

我正在尝试使用以下命令列出已添加到目录堆栈的目录:推送我找不到任何关于如何打印目录堆栈内容的引用或命令。感谢任何帮助 最佳答案 不带参数的pushd输出堆叠目录的列表。pushdc:\pushdwindowspushdhelppushdwindowspushden-uspushd会输出c:\Windows\Help\Windowsc:\Windows\Helpc:\Windowsc:\c:\Temp此处缺少最新推送的目录,但可以通过%__CD__%轻松检索。还有一个目录(在我的例子中是C:\temp),因为那将是上次执行popd之后